<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // 数组的遍历方法
    var list = [1, 4, 7, 2, 5, 8, 3, 6, 9];

    // 回调函数
    // 把一个函数当做参数传递到另一个函数中,让它在另一个函数中调用执行 => 传入时并不会执行,而是在另一个函数中通过参数调用执行 => 锦囊妙计(提前决定好要执行的内容,需要的时候执行)
    // list.forEach(function () {
    //     console.log("2222");
    // })

    // setInterval(function () {
    //     console.log(1111);
    // }, 1000)


    // ----------------------------------------------------

    // 函数内 封装调用函数
    // function doSomething() {
    //     function sing() {
    //         console.log("唱歌");
    //     }
    //     function dance() {
    //         console.log("跳舞");
    //     }
    //     function study() {
    //         console.log("跳舞");
    //     }

    //     sing();
    //     dance();
    //     study();
    // }

    // 函数在没有调用之前 也是存在内存当中的(引用类型 可以理解为函数也是一个特殊的对象), 命名函数可以通过函数名引用,匿名函数通过变量名,对象的键名
    function playBasketball() {
        console.log("打篮球");
    }

    var rap = function () {
        console.log("rap");
    }

    function sing() {
        console.log("唱歌");
    }
    function dance() {
        console.log("跳舞");
    }
    function study() {
        console.log("跳舞");
    }

    function doSomething(fn) {
        // fn引用sing的内存空间 => 函数 (传入时被形参引用 调用时执行)
        // fn = sing;  
        // fn = rap;
        // fn = function () {
        //     console.log("玩游戏");
        // }  
        if (fn && typeof fn === "function") {
            fn();
        }
    }

    doSomething(sing);
    doSomething(rap);
    doSomething(function () {
        console.log("玩游戏");
    })












</script>

</html>